import axios from 'axios'
import Vue from 'vue';
import store from '../store/store';
import {router} from '../router/index';
import {Cookies, getToken} from '../assets/js/jsCookie';
// console.log(getToken('X-Token'))
let vm = new Vue();
const instance = axios.create({
  baseURL: 'http://localhost:3000/',
  timeout: 3000,
  headers: {
    post: {
      // 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
      'Content-Type': 'application/json;charset=UTF-8'
    },
    // common:{
    //   'token': store.state.token //在header中添加token
    // }
  }
})

// 请求拦截
instance.interceptors.request.use(config => {
  // 自定义header，可添加项目token
  // if (store.state.app.token) {
  //   config.headers.token = store.state.app.token;
  //   config.headers.timestamp = new Date().getTime();
  // }
  // if(store.state.token){
  //   config.headers.common['token'] = store.state.token
  // }
  // console.log(this.$cookieStore.getCookie('X-Token'))
  // console.log($cookieStore)
  // console.log(getToken('X-Token'))
  if(getToken('X-Token')!=undefined){
    // console.log(getToken('X-Token'))
    config.headers['X-Token'] = getToken('X-Token')
  }
  // console.log(config)
  return config;
}, error => {
  return Promise.reject(error);
})

// 响应拦截
instance.interceptors.response.use(response => {
  const resCode = response.data.code;
  // console.log(response)
  if (resCode === 20000) {
    return Promise.resolve(response);
  } else {
    return Promise.reject(response);
  }
  return response;
}, error => {
  // const resCode = error.response.status;
  // switch (resCode) {
  //   case 401:
  //     vm.$Message.error(error.response.data.message);
  //     store.commit('logout', this);
  //     store.commit('clearOpenedSubmenu');
  //     // console.log('token-0', store.state.app.token);
  //     router.replace({
  //       name: 'login'
  //     });
  //     break;
  //   case 404:
  //     vm.$Message.error('网络请求不存在');
  //     break;
  //   case 500:
  //     vm.$Message.error('服务器连接错误');
  //     break;
  //   // 其他状态码错误提示
  //   default:
  //     vm.$Message.error(error.response.data.message);
  // }
  return Promise.reject(error);
})

/*
 *封装get方法
 *@param{String} url [请求地址]
 *@param{Object} params 请求参数
 */
export function Get(url, params) {
  return new Promise((resolve, reject) => {
    // console.log(params)
    instance.get(url, {
      params: params
    }).then((res) => {
      // console.log(res)
      resolve(res.data);
    }).catch((error) => {
      // console.log(error)
      reject(error.data);
    })
  })
}

/**
 *封装post方法
 *@param{String} url 请求地址
 *@param{Object} params 请求参数
 */
export function Post(url, params) {
  return new Promise((resolve, reject) => {
    instance.post(url, params).then((res) => {
      // console.log(res.data)
      resolve(res.data);
    }).catch((error) => {
      // console.log(error.data)
      reject(error.data);
    })
  })
}

/**
 *封装put方法
 *@param{String} url 请求地址
 *@param{Object} params 请求参数
 */
export function Put(url, params) {
  return new Promise((resolve, reject) => {
    // console.log(params)
    instance.put(url, params).then((res) => {
      // console.log(res)
      resolve(res.data);
    }).catch((error) => {
      reject(error.data);
    })
  })
}

/**
 *封装patch方法
 *@param{String} url 请求地址
 *@param{Object} params 请求参数
 */
export function Patch(url, params) {
  return new Promise((resolve, reject) => {
    instance.put(url, params).then((res) => {
      resolve(res.data);
    }).catch((error) => {
      reject(error.data);
    })
  })
}

/**
 *封装delete方法
 *@param{String} url [请求地址]
 *@param{Object} params [请求参数]
 */
export function Delete(url, params) {
  return new Promise((resolve, reject) => {
    instance.delete(url, {
      params: params
    }).then((res) => {
      resolve(res.data);
    }).catch((error) => {
      reject(error.data);
    })
  })
}
